<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018-07-31
 * Time: 16:17
 */
namespace app\index\controller;

//导入模型类
use app\index\model\Staff;
class Update{

    //主键来自于表中记录；
    //1.单条更新:save方法
    public function index(){
        //1.从表中取出id=1011的数据
        $data = Staff::get(1013);

        //2.查看从表中取出的数据
        echo '1. 查看从表中取出的数据:<br />';
        dump($data->getData());

        //3.修改数据对象中与表字段对应的原始数据:$data属性
        $data -> setAttr('name','朱老师');
        $data -> setAttr('salary',5000);

        //4.更新表中记录
        $affected = $data -> allowField(true) -> save();

        //5.查看更新后的数据
        echo '2. 查看更新后的数据:<br />';
        dump($data -> getData());

        //6.判断是否成功,并给出反馈信息
        if (!empty($affected)) {
            echo '更新成功!';
        }else{
            echo '更新失败~~';
        }


        //1.从表中取出id=1011的数据
        $data = Staff::get(1016);

        //2.更新数据对象:魔术方法实现
        $data -> name = 'AA老师';
        $data -> salary = 5000;

        //3.更新表中数据,并反馈执行结果
        echo  ($data -> allowField(true) -> save()) ? '更新成功!' : '更新失败~~';
    }

    //第二种情况：更新主键由用户自己定义
    public function index1(){

        //设置更新条件
        $where = ['id'=> 1007];

        //设置更新数据
        $data = [];
        $data['name'] = '马金莲';

        //执行更新操作
        $affected = (new Staff) -> allowField(true) -> save($data,$where);

        //反馈执行结果
        echo  $affected ? '更新成功!' : '更新失败~~';
    }


    //2.批量更新:saveAll方法
    //更新tp5_staff表中，将id=1006的name更新为：宋门庆，id=1007的name更新为：马金莲；
    public function index2(){
        //创建模型对象
        $model = new Staff;

        //创建自定义数据
        $data[] = ['id' => 1006,'name'=>'宋门庆'];
        $data[] = ['id' => 1007,'name'=>'马金莲'];

        //批量更新
        $result = $model -> saveAll($data,true);

        //反馈执行信息
        echo $result ? '更新成功!<br />' : '更新失败~~<br />' ;

        //查看更新后的信息
        echo '更新后的记录信息:<br />';

        //遍历数据对象数组
        foreach ($result as $list){
            dump($list -> getData());
        }
    }
    //二、在tp5_staff表中，找出name字段值中含有'云'字符的记录，将salary字段更新为6000
    public function index3(){
        $dataBefore = Staff::where('name','like','%小%')->select();
//        dump($dataBefore);

        if (!empty($dataBefore)){

            //查看一下更新前的数据对象中的原始数据
            echo '1. 查看一下更新前的数据对象中的原始数据<br />';
            foreach ($dataBefore as $before){
                dump($before->getData());
            }

            //更新数据对象中的原始数据
            foreach ($dataBefore as $list){
//                $list -> setAttr('salary','6000');
                $list->salary = 5555;
                $result[] = $list -> getData();
            }

            //用数据对象中的原始数据更新表中对应字段信息
            $dataAfter = (new Staff) -> saveAll($result);

            if (!empty($dataBefore)){
                echo '更新成功!<br />';
                //查看更新完成后返回的数据对象
                echo '2. 查看一下更新后的数据对象中的原始数据<br />';
                foreach ($dataAfter as $after){
                    dump($after->getData());
                }

            }else{
                echo '更新失败!';
            }
        } else {
            echo '没有满足条件的记录!';
        }

    }

    //静态更新:update方法
    public function index4(){
        //1.设置更新数据
        $data['name'] = '马金莲';

        //2.设置更新条件
        $where['id'] = 1007;

        //2.静态调用update()执行更新操作
        $model = Staff::update($data,$where);

        //3.查看返回值:数据对象
        dump($model);

        /*//1.设置更新数据
        $data['id'] = 1007;  //更新条件自动识别
        $data['name'] = '马金莲';

        //2.静态调用update()执行更新操作
        $model = Staff::update($data);

        //3.查看返回值:数据对象
        dump($model);*/
    }

    //查询类Query直接更新
    public function index5(){
        //一、 【模型对象】调用数据库类方法：更新数据
        $affected = (new Staff)       // new Staff ：创建模型对象
        -> where('id',1007)      //设置更新条件
        -> update(['name'=>'马金莲']);   //更新条件

        dump($affected);   //查看执行结果:受影响记录数
        //二、【模型类】调用数据库方法：更新数据
        $affected = Staff::where('id',1007)        //静态设置更新条件
        -> update(['name'=>'马金莲']);   //执行更新操作

        dump($affected);    //查看更新结果:受影响记录数量
    }

}